import { IsString, IsOptional, IsNumber, IsBoolean, IsArray, IsObject } from "class-validator";

/**
 * 监控数据DTO
 * 用于接收前端发送的监控数据
 */
export class MonitoringDataDto {
  @IsString()
  type: string;

  @IsString()
  @IsOptional()
  userId?: string;

  @IsString()
  @IsOptional()
  userName?: string;

  @IsString()
  @IsOptional()
  userEmail?: string;

  @IsString()
  @IsOptional()
  pageUrl?: string;

  @IsString()
  @IsOptional()
  pageTitle?: string;

  @IsString()
  @IsOptional()
  referrer?: string;

  @IsString()
  @IsOptional()
  eventType?: string;

  @IsString()
  @IsOptional()
  elementTag?: string;

  @IsString()
  @IsOptional()
  elementText?: string;

  @IsString()
  @IsOptional()
  elementClass?: string;

  @IsString()
  @IsOptional()
  elementId?: string;

  @IsNumber()
  @IsOptional()
  xCoordinate?: number;

  @IsNumber()
  @IsOptional()
  yCoordinate?: number;

  @IsString()
  @IsOptional()
  errorType?: string;

  @IsString()
  @IsOptional()
  errorMessage?: string;

  @IsString()
  @IsOptional()
  errorStack?: string;

  @IsString()
  @IsOptional()
  sourceFile?: string;

  @IsNumber()
  @IsOptional()
  lineNumber?: number;

  @IsNumber()
  @IsOptional()
  columnNumber?: number;

  @IsString()
  @IsOptional()
  apiUrl?: string;

  @IsString()
  @IsOptional()
  httpMethod?: string;

  @IsNumber()
  @IsOptional()
  statusCode?: number;

  @IsNumber()
  @IsOptional()
  duration?: number;

  @IsBoolean()
  @IsOptional()
  success?: boolean;

  @IsObject()
  @IsOptional()
  performance?: any;

  @IsObject()
  @IsOptional()
  customData?: any;

  @IsString()
  @IsOptional()
  browser?: string;

  @IsString()
  @IsOptional()
  os?: string;

  @IsString()
  @IsOptional()
  ipAddress?: string;

  @IsString()
  @IsOptional()
  userAgent?: string;
}